package com.whmall.service.crm.module.customerpool.service;

import com.whmall.component.entity.dto.*;
import com.whmall.service.crm.entity.dto.customerpool.*;

import java.util.Date;
import java.util.List;
import java.util.Map;

public interface CustomerPoolService {

    /**
     * 超过限定时间未下单定时任务
     */
    void noOrderWithinTimeLimitJobHandler(Date followTime, Date effectiveTime);

    /**
     * 释放客户定时任务
     */
    void releaseCustomerJobHandler(Map<Long, QueryManagerRspDTO> traders, Map<Long, Date> employeeNotices);

    /**
     * 获取评分时间配置
     * @return
     */
    CustomerPoolScoreTimeConfigRspDTO getScoreTimeConfig(Date now);

    /**
     * 分页查询个人公共池/公共池客户
     * @param pageReqDTO
     * @param reqDTO
     * @return
     */
    PageRspDTO<CustomerPoolListRspDTO> list(PageReqDTO pageReqDTO, CustomerPoolListReqDTO reqDTO);

    /**
     * 集合查询个人公共池/公共池客户
     * @param companyIds
     * @return
     */
    List<CustomerPoolListRspDTO> listByCompanyIds(List<Long> companyIds);

    /**
     * 判断客户是否在开发客户栏 并且状态为 非已释放状态
     * @param id
     * @return
     */
     Boolean chockfollowStatus(Long id);

    /**
     * 分页查询客户池日志
     * @param pageReqDTO
     * @param companyId
     * @return
     */
    PageRspDTO<CustomerPoolLogListRspDTO> listLog(PageReqDTO pageReqDTO, Long companyId);

    /**
     * 获取客户/释放客户
     * @param reqDTO
     */
    void acquire(CustomerPoolAcquireReqDTO reqDTO);

    /**
     * 创建订单后终止跟进
     * @param companyId
     */
    void createOrder(Long companyId);

    /**
     * 分配客户
     * @param reqDTO
     */
    void assign(CustomerPoolAssignReqDTO reqDTO);

    /**
     * 推送开发客户栏
     * @param reqDTO
     */
    void push(CustomerPoolPushReqDTO reqDTO);

    /**
     * 隐藏公司/恢复显示
     * @param reqDTO
     */
    void hide(UpdateBatchCommonReqDTO reqDTO);

    /**
     * 无开发价值/恢复开发价值
     * @param reqDTO
     */
    void noDevelopmentValue(UpdateBatchCommonReqDTO reqDTO);

    /**
     * 锁定客户/解锁客户
     * @param reqDTO
     */
    void lock(UpdateCommonReqDTO reqDTO);

    /**
     * 分页查询客户池跟进
     * @param pageReqDTO
     * @param reqDTO
     * @return
     */
    PageRspDTO<CustomerPoolListFollowRspDTO> listFollow(PageReqDTO pageReqDTO, CustomerPoolListFollowReqDTO reqDTO);

    /**
     * 分页查询更多客户池跟进
     * @param pageReqDTO
     * @param companyId
     * @return
     */
    PageRspDTO<CustomerPoolListMoreFollowRspDTO> listMoreFollow(PageReqDTO pageReqDTO, Long companyId);

    /**
     * 导出客户池跟进
     * @param reqDTO
     * @return
     */
    List<CustomerPoolExportFollowRspDTO> exportFollow(CustomerPoolExportFollowReqDTO reqDTO);

    /**
     * 查询个人公共池时间分布
     * @param reqDTO
     * @return
     */
    List<Date> listTimeDistri(CustomerPoolListTimeDistriReqDTO reqDTO);

    /**
     * 跟进客户
     * @param reqDTO
     */
    void follow(CustomerPoolFollowReqDTO reqDTO);

    /**
     * 根据条件查询数量
     *
     * @param condition 条件
     * @return 数量
     */
    Long count(CustomerPoolListTimeDistriReqDTO condition);

}
